#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
#include <queue>
#include <unistd.h>
/**
 * std::lock_guard<std::mutex>的使用：
 * 特点：
    简单且高效：std::lock_guard 是一个非常轻量级的锁定机制。它在构造时锁定互斥锁，在析构时解锁。
    不可解锁：std::lock_guard 不提供解锁的功能。一旦它被创建并锁定了互斥锁，在它的生命周期内互斥锁始终保持锁定状态，直到 std::lock_guard 被销毁。
    不可移动：std::lock_guard 不能被移动或复制。
   使用场景：
    当你只需要简单地锁定一个互斥锁，并确保在离开作用域时自动解锁。
 * 
*/

std::mutex mtx;
void thread1(){
    std::lock_guard<std::mutex> lock(mtx);
    printf("thread1 get lock!\n");
    sleep(2);
    printf("thread1 release lock\n");
}
void thread2(){
    sleep(2);
    std::lock_guard<std::mutex> lock(mtx);
    printf("thread2 get lock!\n");
    sleep(2);
    printf("thread2 release lock\n");
}

int main(){
    std::thread t1(&thread1);
    std::thread t2(&thread2);
    t1.join();
    t2.join();
}